#  Python两种输出值的方式: 表达式语句和 print() 函数。
# 第三种方式是使用文件对象的 write() 方法，
# 标准输出文件可以用 sys.stdout 引用。
# 如果你希望输出的形式更加多样，
# 可以使用 str.format() 函数来格式化输出值。
# 如果你希望将输出的值转成字符串，
# 可以使用 repr() 或 str() 函数来实现。
# str()： 函数返回一个用户易读的表达形式。
# repr()： 产生一个解释器易读的表达形式。
s = 'Hello'
print(str(s))
print(repr(s))
for x in range(1, 11):
  print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ')
   # 注意前一行 'end' 的使用
  print(repr(x*x*x).rjust(4))
for x in range(1, 11):
    print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x))
print('{}网址： "{}!"'.format('菜鸟教程', 'www.runoob.com'))
print('{0}和{1}'.format('谷歌', '百度'))
print('{1}和{0}'.format('谷歌', '百度'))
# 如果在 format() 中使用了关键字参数,
# 那么它们的值会指向使用该名字的参数。
print('{name}是{site}'.format(name='任硕', site='人'))
# 位置及关键字参数可以任意的结合:
print('{0},{1},{site}'.format(3+2, 6*6, site  = '嗡嗡嗡' ))
# !a (使用 ascii()), !s (使用 str()) 和 !r (使用 repr())
# 可以用于在格式化某个值之前对其进行转化:
import math
print('常量PI的近似值为：{}'.format(math.pi))
print('常量PI的近似值为：{!r}'.format(math.pi))
# 可选项 : 和格式标识符可以跟着字段名。
# 这就允许对值进行更好的格式化。 下面的例子将 Pi 保留到小数点后三位：
print('常量近似值为{0:.3f}'.format(math.pi))
# 在 : 后传入一个整数, 可以保证该域至少有这么多的宽度。
# 用于美化表格时很有用。
table = {'Google': 1, 'Runnob': 2, 'Taobao': 3}
for name, number in table.items():
    print('{0:10}==>{1:10}'.format(name,number))
# 如果你有一个很长的格式化字符串, 而你不想将它们分开,
# 那么在格式化时通过变量名而非位置会是很好的事情。
# 最简单的就是传入一个字典, 然后使用方括号 [] 来访问键值 :
table = {'Google': 1, 'Runoob': 2, 'Taobao': 3}
print('Runoob: {0[Runoob]:d}; Google: {0[Google]:d}; Taobao: {0[Taobao]:d}'.format(table))
# 格式化字符串
import  math
print('常量PI的今次职位：%.3f'% math.pi)
# 读取键盘输入
# str = input("请输入")
# print('你输入的内容是', str)
# 读和写文件
# f = open("py.txt", "w")
# f.write("python真的是太好用了\n太简单了")
# f.close()
# 读取文件内容
# f = open('py.txt', "r")
# str = f.read()
# print(str)
# f.close()
# 打开一个文件
# f = open("py.txt", "r")
# str = f.readline()
# print(str)
# # 关闭打开的文件
# f.close()

# 打开一个文件
# f = open("py.txt", "w")
# value = ('www.runoob.com', 14)
# s = str(value)
# f.write(s)
# # 关闭打开的文件
# f.close()
# 爬取网站代码
# from urllib import request
# response = request.urlopen("http://www.baidu.com/")  # 打开网站
# fi = open("py.txt", 'w')                        # open一个txt文件
# page = fi.write(str(response.read()))                # 网站代码写入
# fi.close()                                           # 关闭txt文件

#  python的pickle模块实现了基本的数据序列和反序列化。
# 通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去，
# 永久存储。
# 通过pickle模块的反序列化操作，我们能够从文件中创建上一次程序保存的对象。
# 基本接口：pickle.dump(obj, file, [,protocol])
import pickle
# 使用pickle模块将数据对象保存到文件
data1 = {'a': [1, 2.0, 3, 4+6j],
         'b': ('string', u'Unicode string'),
         'c': None}
selfref_list = [1, 2, 3]
selfref_list.append(selfref_list)
output = open('data.pkl', 'wb')
# Pickle dictionary using protocol 0.
pickle.dump(data1, output)
# Pickle the list using the highest protocol available.
pickle.dump(selfref_list, output, -1)
output.close()

#!/usr/bin/python3
import pprint, pickle

#使用pickle模块从文件中重构python对象
pkl_file = open('data.pkl', 'rb')

data1 = pickle.load(pkl_file)
pprint.pprint(data1)

data2 = pickle.load(pkl_file)
pprint.pprint(data2)

pkl_file.close()
